"""
宿舍内务pro

宿舍内务根据难度分为几个等级，每完成一项任务就可以累计对应等级的分数。等级和分数对应关系如下：
1级：擦桌子、椅子、窗户 - 对应1分
2级：扫地、拖地 - 对应2分
3级：扫厕所 - 对应3分
4级：帮全宿舍打饭 - 对应4分
5级：帮全宿舍签到 - 对应5分

编写一个Python程序，先读取“内务记录.txt”文件，获取所有已填写的信息（字典格式）。
然后让用户输入自己的名字，名字不存在则提示名字错误然后结束程序，如果名字存在，则循环输入自己完成的宿舍内务任务和完成次数。
每次输入结束后，程序会统计并显示用户总共完成每项任务的次数（包括以前的记录）。
如果任务名称不存在则跳出循环，打印用户的总分，并将本次的任务记录更新到 “内务记录.txt” 文件中，程序结束

编程思路提示：
使用with open来操作文件。
读取文件时，将字符串转换回字典。
写入文件前，将字典转换为字符串。
使用循环来接收用户输入的任务和次数。
使用字典来存储和更新任务次数。
输入为空时结束循环，写入文件。
判断key存不存在字典用 if key in dict: 的方式，或者用异常捕获配合 dict[key] 的方式
任务和分数的对应字典用：
    task_scores = {'擦桌子': 1, '擦椅子': 1, '擦窗户': 1, '扫地': 2, '拖地': 2, '扫厕所': 3, '帮全宿舍打饭': 4, '帮全宿舍签到': 5}
"""


import ast

# 任务和分数的对应字典
task_scores = {'擦桌子': 1, '擦椅子': 1, '擦窗户': 1, '扫地': 2, '拖地': 2, '扫厕所': 3, '帮全宿舍打饭': 4, '帮全宿舍签到': 5}

# 读取内务记录文件
try:
    with open('内务记录.txt', 'r') as f:
        content = f.read()
        if content:
            records = ast.literal_eval(content)
        else:
            records = {}
except FileNotFoundError:
    records = {}


name = input("请输入你的名字: ")
if name not in records:
    print("名字错误")
    raise SystemExit

# 用字典来存储本次输入任务的次数
task_count = {}

while True:
    task = input("请输入你完成的宿舍内务任务（输入为空结束）: ")
    if not task:
        break
    try:
        times = int(input("请输入完成次数: "))
    except ValueError:
        print("输入次数应为整数，请重新输入")
        continue
    if task not in task_scores:
        break
    if task not in task_count:
        task_count[task] = times
    else:
        task_count[task] += times
    if task not in records.get(name, {}):
        records[name][task] = times
    else:
        records[name][task] += times


# 计算总分
total_score = 0
for task, count in task_count.items():
    total_score += task_scores[task] * count


print("你完成每项任务的次数统计如下:")
for task, count in task_count.items():
    print(f"{task}: {count}次")


print(f"你的总分数为: {total_score}")


# 将更新后的记录写入文件
with open('内务记录.txt', 'w') as f:
    f.write(str(records))


